{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide\n",
    "!pip install -Uqq nixtla"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide \n",
    "from nixtla.utils import in_colab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide \n",
    "IN_COLAB = in_colab()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide\n",
    "if not IN_COLAB:\n",
    "    from nixtla.utils import colab_badge\n",
    "    from dotenv import load_dotenv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Add exogenous variables\n",
    "\n",
    "To detect anomalies with exogenous variables, load a dataset with the exogenous features as columns. Use the same `detect_anomalies` method and plot the weights of each feature using `weight_x.plot()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "[![](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Nixtla/nixtla/blob/main/nbs/docs/capabilities/anomaly-detection/02_anomaly_exogenous.ipynb)"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#| echo: false\n",
    "if not IN_COLAB:\n",
    "    load_dotenv()\n",
    "    colab_badge('docs/capabilities/anomaly-detection/02_anomaly_exogenous')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from nixtla import NixtlaClient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nixtla_client = NixtlaClient(\n",
    "    # defaults to os.environ.get(\"NIXTLA_API_KEY\")\n",
    "    api_key = 'my_api_key_provided_by_nixtla'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 👍 Use an Azure AI endpoint\n",
    "> \n",
    "> To use an Azure AI endpoint, set the `base_url` argument:\n",
    "> \n",
    "> `nixtla_client = NixtlaClient(base_url=\"you azure ai endpoint\", api_key=\"your api_key\")`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide\n",
    "if not IN_COLAB:\n",
    "    from dotenv import load_dotenv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| hide\n",
    "load_dotenv()\n",
    "nixtla_client = NixtlaClient()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:nixtla.nixtla_client:Validating inputs...\n",
      "INFO:nixtla.nixtla_client:Preprocessing dataframes...\n",
      "INFO:nixtla.nixtla_client:Inferred freq: H\n",
      "INFO:nixtla.nixtla_client:Calling Anomaly Detector Endpoint...\n",
      "INFO:nixtla.nixtla_client:Using the following exogenous variables: Exogenous1, Exogenous2, day_0, day_1, day_2, day_3, day_4, day_5, day_6\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='features'>"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnUAAAGdCAYAAAB0CIUmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABHwElEQVR4nO3de1xVdb7/8ffmKpct3hCwkFQMRc0bNd7FUrxQ6kxHnSwV0cw5U4olY2SOOVQyio2jnejkJDaDo2WFj7Kx1BLLW5qiiaUWQlDeMo2bCibr94eH/Wun6CaRDYvX8/FYj4d7fb97rc/6gu6367vW2hbDMAwBAACgTnNxdgEAAAC4cYQ6AAAAEyDUAQAAmAChDgAAwAQIdQAAACZAqAMAADABQh0AAIAJEOoAAABMwM3ZBaDmlJeX69ixY7JarbJYLM4uBwAAOMAwDBUVFalFixZycan8fByhrh45duyYgoODnV0GAAD4FfLz83XrrbdW2k6oq0esVquky78UDRs2dHI1AADAEYWFhQoODrZ9jleGUFePVEy5NmzYkFAHAEAdc71Lp7hRAgAAwAQIdQAAACZAqAMAADABrqkDAKAeMQxDP/30ky5duuTsUvB/XF1d5ebmdsOPGyPUAQBQT5SVlen48eM6d+6cs0vBL3h7eysoKEgeHh6/ehuEOgAA6oHy8nLl5OTI1dVVLVq0kIeHBw+irwUMw1BZWZm+//575eTkqG3bttd8wPC1EOoAAKgHysrKVF5eruDgYHl7ezu7HPyMl5eX3N3d9c0336isrEwNGjT4Vdsh1NVDHed+IBfPyv9C5yZF12A1AICa9GvPAuHmqo6fCz9ZAAAAEyDUAQCAeuO2227T4sWLHe6fm5sri8Wiffv23bSaqgvTrwAA1GO3Pfleje7P2Zf47N69Wz4+PtW6zRUrViguLk4//vhjtW63qgh1AACg3vD393d2CTcN0683IDIyUnFxcc4uAwAA03r33XfVqFEjlZeXS5L27dsni8Wi+Ph4W59HHnlEDzzwgCRp+/bt6tevn7y8vBQcHKxp06appKTE1veX06+HDh1Snz591KBBA4WHh2vTpk2yWCxau3atXR1Hjx7VgAED5O3trc6dO2vHjh2SpIyMDE2cOFEFBQWyWCyyWCx65plnJEkvvfSS2rZtqwYNGiggIED/9V//dRNG6P8j1NUhO3bs0N133y0fHx81atRIkZGROn/+vLPLAgDgpunXr5+KioqUmZkpSdqyZYuaNWumLVu22PpkZGSof//+OnDggAYPHqzf/e53+vzzz/X6669r69atevTRR6+67fLyco0cOVLe3t769NNP9corr2j27NlX7Tt79mzNnDlT+/bt0+23364HHnhAP/30k3r16qXFixerYcOGOn78uI4fP66ZM2fqs88+07Rp0/SXv/xFhw8f1vvvv69+/fpV/wD9DNOvdcSOHTs0ZMgQJSQkaOnSpfLw8ND+/fu5NR0AYGp+fn7q0qWLMjIy1L17d2VkZGjGjBmaN2+eioqKVFJSoiNHjigyMlLPP/+8xo4da5tFa9u2rZYsWaL+/fsrJSXliue/bdiwQdnZ2crIyFBgYKAk6bnnntOgQYOuqGPmzJmKjr58PeC8efPUoUMHff3112rXrp38/PxksVhs25CkvLw8+fj46N5775XValVISIi6du16k0bpMhKBg0pKSjR+/Hj5+voqKChIixYtsmtPS0tTRESErFarAgMDNXbsWJ06dUrS5adFh4aGKjk52e49WVlZcnFxUXZ29nX3P2PGDE2bNk1PPvmkOnTooLZt2+q//uu/5OnpWX0HCQBALRQZGamMjAwZhqFPPvlEI0aMUMeOHbV161Zt3rxZAQEBateunfbs2aMVK1bI19fXtgwePNj2bRq/dPjwYQUHB9uFsbvuuuuqNdxxxx22PwcFBUmS7XP+agYNGqSQkBC1bt1a48aN08qVK2/617MR6hwUHx+vzZs3Kz09XRs2bFBGRob27Nljay8rK1NiYqL279+vtWvXKicnRzExMZIki8Wi2NhYpaam2m1z+fLl6tu3r9q0aXPNfZ86dUqffvqpmjdvrl69eikgIED9+/fX1q1br/m+0tJSFRYW2i0AANQ1kZGR+uSTT2wzVOHh4erfv7+2bNlim3qVLk+nPvLII9q3b59t2b9/v7766qurftYahuHwV6W5u7vb/lzxnorr/K7GarVq7969WrVqlYKCgvTnP/9ZnTt3vql3yBLqHFBcXKxXX31VycnJGjRokDp16qTXXntNly5dsvWJjY3V0KFD1bp1a/Xo0UNLlizR+vXrVVxcLEmaOHGiDh8+rF27dkmSLl68qLS0NMXGxl53/0ePHpUkPfPMM3r44Yf1/vvvq1u3brrnnnv0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flubNm2SJHl5ealHjx5KSkrSbbfdptOnT+vpp5+228af//xnde/eXR06dFBpaanWrVtnC4XHjh1TZGSkWrZsqeTkZH3//fe29wUGBv66gQcAAKbi9FD3/vvv265RqxAWFqaxY8cqNzdX7777rqTL4eUf//iHRo8erUGDBqlLly764IMPNH36dN15553y9vbW/fffrxdeeMG2nVmzZunEiRMaP368XF1dNWXKFA0ePFiurq62PomJiWrevLnmz5+vo0ePqlGjRurWrZueeuoph49h5MiR+vvf/66FCxdq2rRpatWqlVJTUxUZGWnrs3z5csXGxioiIkJhYWFasGCBoqKibO0eHh5KSEhQbm6uvLy81LdvX61evVqStGHDBn399df6+uuvdeutt9rt24n3uQAAgFrEqXe/1rTy8nK1b99eo0ePVmJiorPLqXEVd89w9ysAADeOu19r0DfffKMNGzaof//+Ki0t1YsvvqicnByNHTvW2aUBAABUq1p9o8SNcnFx0YoVK3TnnXeqd+/eOnDggDZt2mS7Vg0AAMAsTH2mLjg4WNu2bXN2GQAAADedqc/UAQAA1BemPlOHq8uaN5hn1gEAYDKcqQMAADABQh0AAIAJEOoAAABMgFAHAABgAoQ6AAAAEyDUAQAAmAChDgAAwAQIdQAAACZAqAMAADABQh0AAIAJEOoAAABMgFAHAABgAoQ6AAAAEyDUAQAAmAChDgAAwAQIdQAAACZAqAMAADABQh0AAIAJEOoAAABMwM3ZBaDmdZz7gVw8vZ1dBgAAppGbFO3sEjhTBwAAYAaEOgAAABMg1AEAAJgAoQ4AAMAECHUAAAAmQKgDAAAwAaeGupiYGFksliuWIUOGOLOsWum5555Tr1695O3trUaNGjm7HAAAUMs4/Tl1Q4YMUWpqqt06T09PJ1VTe5WVlWnUqFHq2bOnXn31VWeXAwAAahmnT796enoqMDDQbmncuLEyMjLk4eGhTz75xNZ30aJFatasmY4fPy5JOnDggO6++255eXmpadOmmjJlioqLi239f/rpJ02bNk2NGjVS06ZNNWvWLE2YMEEjR4609TEMQwsWLFDr1q3l5eWlzp07680337S1Z2RkyGKx6MMPP1RERIS8vb3Vq1cvHT582O44UlJS1KZNG3l4eCgsLEz/+te/bG25ubmyWCzat2+fbd2PP/4oi8WijIwMSdLZs2f14IMPyt/fX15eXmrbtq1d2J03b55mzJihTp063dB4AwAAc3J6qKtMZGSk4uLiNG7cOBUUFGj//v2aPXu2li1bpqCgIJ07d05DhgxR48aNtXv3bq1Zs0abNm3So48+atvGX//6V61cuVKpqanatm2bCgsLtXbtWrv9PP3000pNTVVKSooOHjyoGTNm6KGHHtKWLVvs+s2ePVuLFi3SZ599Jjc3N8XGxtra0tPTNX36dD3xxBPKysrSI488ookTJ2rz5s0OH++cOXP0xRdfaP369fryyy+VkpKiZs2a/brB+z+lpaUqLCy0WwAAgDk5ffp13bp18vX1tVs3a9YszZkzR88++6w2bdqkKVOm6ODBgxo3bpx++9vfSpJWrlyp8+fP65///Kd8fHwkSS+++KLuu+8+/fWvf1VAQICWLl2qhIQE23tefPFF/ec//7Htp6SkRC+88II++ugj9ezZU5LUunVrbd26Vf/7v/+r/v372/o+99xzttdPPvmkoqOjdeHCBTVo0EDJycmKiYnRf//3f0uSHn/8ce3cuVPJyckaMGCAQ+OQl5enrl27KiIiQpJ02223VXUorzB//nzNmzfvhrcDAABqP6eHugEDBiglJcVuXZMmTSRJHh4eSktL0x133KGQkBAtXrzY1ufLL79U586dbYFOknr37q3y8nIdPnxYDRo00MmTJ3XXXXfZ2l1dXdW9e3eVl5dLkr744gtduHBBgwYNstt/WVmZunbtarfujjvusP05KChIknTq1Cm1bNlSX375paZMmWLXv3fv3vr73//u8Dj84Q9/0P3336+9e/cqKipKI0eOVK9evRx+/9UkJCTo8ccft70uLCxUcHDwDW0TAADUTk4PdT4+PgoNDa20ffv27ZKkM2fO6MyZM7YQZxiGLBbLVd/z8/W/7GMYhu3PFeHuvffe0y233GLX75c3a7i7u1+xzYr3V7afinUuLi5X7PvixYt2/YcOHapvvvlG7733njZt2qR77rlHf/zjH5WcnHzVY3SEp6cnN50AAFBP1Npr6iQpOztbM2bM0LJly9SjRw+NHz/eFqTCw8O1b98+lZSU2Ppv27ZNLi4uuv322+Xn56eAgADt2rXL1n7p0iVlZmbaXoeHh8vT01N5eXkKDQ21W6pyRqt9+/baunWr3brt27erffv2kiR/f39Jst3g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4+233zYOHDhgPPDAA1d97MCtt95qbNq0ydi7d69x991317nHLzji53e/Gkb9HZtdu3YZbm5uxnPPPWd89dVXxsqVKw1vb28jLS3N1qe+js2ECROMW265xfZIk7ffftto1qyZ8ac//cnWp76MTVFRkZGZmWlkZmYakowXXnjByMzMtN3BWV3jMGTIEOOOO+4wduzYYezYscPo1KlTrX9sx7XG5uLFi8bw4cONW2+91di3b5/dv82lpaW2bZh1bGoCoa6e+J//+R8jJCTE8PDwMLp162Z7tIdZSbrqkpqaautTXl5uzJ071wgMDDQ8PT2Nfv36GQcOHLDbzvnz541HH33UaNKkieHl5WXce++9Rl5eXg0fzc33y1BXn8fm3XffNTp27Gh4enoa7dq1M1555RW79vo6NoWFhcb06dONli1bGg0aNDBat25tzJ492+7DuL6MzebNm6/678uECRMMw6i+cfjhhx+MBx980LBarYbVajUefPBB4+zZszV0lL/OtcYmJyen0n+bN2/ebNuGWcemJlgMwzBq7rwgAAAAbgauqQMAADABQh0AAIAJEOoAAABMgFAHAABgAoQ6AAAAEyDUAQAAmAChDgAAwAQIdQAAACZAqAMAADABQh0AAIAJEOoAAABMgFAHAABgAv8PbPr04976b/YAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Read the dataset\n",
    "# The dataset has exogenous features in its columns\n",
    "df = pd.read_csv('https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/electricity-short-with-ex-vars.csv')\n",
    "\n",
    "# Detect anomalies\n",
    "anomalies_df = nixtla_client.detect_anomalies(\n",
    "    df=df,\n",
    "    time_col='ds',\n",
    "    target_col='y'\n",
    ")\n",
    "\n",
    "# Plot weight of exgeonous features\n",
    "nixtla_client.weights_x.plot.barh(x='features', y='weights')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 📘 Available models in Azure AI\n",
    ">\n",
    "> If you use an Azure AI endpoint, set `model=\"azureai\"`\n",
    ">\n",
    "> `nixtla_client.detect_anomalies(..., model=\"azureai\")`\n",
    "> \n",
    "> For the public API, two models are supported: `timegpt-1` and `timegpt-1-long-horizon`.\n",
    "> \n",
    "> By default, `timegpt-1` is used. See [this tutorial](https://docs.nixtla.io/docs/tutorials-long_horizon_forecasting) for details on using `timegpt-1-long-horizon`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Read our detailed guide on [anomaly detection](https://docs.nixtla.io/docs/tutorials/anomaly_detection) for more information."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
